/*
*	Copyright 2014-2015 Davide Bettoni (https://www.linkedin.com/in/dbettoni)
*	
*	Licensed under the Apache License, Version 2.0 (the "License");
*	you may not use this file except in compliance with the License.
*	You may obtain a copy of the License at
*	
*	    http://www.apache.org/licenses/LICENSE-2.0
*	
*	Unless required by applicable law or agreed to in writing, software
*	distributed under the License is distributed on an "AS IS" BASIS,
*	WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*	See the License for the specific language governing permissions and
*	limitations under the License.
*/

package it.agapps.common.collections;

import it.agapps.common.functions.ICommand;
import it.agapps.common.functions.IMatcher;

import java.util.Collection;

public class Executor<T extends Object// tipo degli elementi contenuti nella collection su cui viene eseguito il comando
> {

	/**
	 * @return il numero di esecuzioni effettuate
	 */
	public int exec(Collection<T> collection, IMatcher<T> matcher, ICommand<T> command) {
		int n = 0;
		for (T fr : collection) {
			if (matcher.match(fr)) {
				command.exec(fr);
				n++;
			}
		}
		return n;
	}

	public void exec(Collection<T> collection, ICommand<T> command) {
		for (T fr : collection) {
			command.exec(fr);
		}
	}
}
